package org.example;

import java.math.BigDecimal;

public class TaxiMeter {
    // 不超过8公里的单价
    private static final BigDecimal BASE_PRICE = new BigDecimal("0.8");
    // 超过8公里后每公里的单价
    private static final BigDecimal EXTRA_PRICE = new BigDecimal("1.2");
    // 超过8公里后的距离阈值
    private static final int EXTRA_DISTANCE = 8;
    // 停车等待每分钟的单价
    private static final BigDecimal WAITING_PRICE = new BigDecimal("0.25");

    /**
     * 计算出租车费用
     *
     * @param distance 行驶距离，单位为公里
     * @param waitingTime 等待时间，单位为分钟
     * @return 费用，单位为元
     */

    // 重构前的代码实现

//    public static BigDecimal calculate(int distance, int waitingTime) {
//        BigDecimal price = BigDecimal.ZERO;
//        // 计算不超过8公里的费用
//        if (distance <= EXTRA_DISTANCE) {
//            price = BASE_PRICE.multiply(new BigDecimal(distance));
//        } else { // 超过8公里的费用
//            price = BASE_PRICE.multiply(new BigDecimal(EXTRA_DISTANCE))
//                    .add(EXTRA_PRICE.multiply(new BigDecimal(distance - EXTRA_DISTANCE)));
//        }
//        // 加上停车等待费用
//        price = price.add(WAITING_PRICE.multiply(new BigDecimal(waitingTime)));
//
//        return price;
//    }


    // 重构后的代码实现
    /**
     * 重构代码上面，压缩了代码行数
     */
    public static BigDecimal calculate(int distance, int waitingTime) {
        BigDecimal price =
                distance <= EXTRA_DISTANCE ? BASE_PRICE.multiply(new BigDecimal(distance)) :
                        BASE_PRICE.multiply(new BigDecimal(EXTRA_DISTANCE)).add(EXTRA_PRICE.multiply(new BigDecimal(distance - EXTRA_DISTANCE)));
        return price.add(WAITING_PRICE.multiply(new BigDecimal(waitingTime)));
    }


}




